#pragma once
#include "DeviceBase.h"

namespace RobotPlant { namespace RobotProxy{
	using namespace std;
	using namespace boost::join;
	using namespace RobotPlant::Common;

	/*
	The Encoder Device enables you to access state information from encoders.
	The most typical use of encoders is to measure rotation of a rotational device, 
	such as a motor, to keep track of its distance traveled and thereby the robot's relative position. 
	It may also be used to control speed. 
	While distance and position can also be estimated based on the elapsed time and motor power, 
	such alternatives are not as accurate since the distance traveled may be affected by factors such the surface the wheel connected to the motor is traveling on. 
	However, even encoders might not always be entirely accurate as a wheel may slip or the robot might be relocated by some other means.
	*/
	class RP_ROBOTPROXY_API EncoderDevice : public DeviceBase
	{
	protected:

	public:
		/*
		Constructor
		*/
		EncoderDevice(RobotInstance* pParent,joint::spawn_type e=0);

		~EncoderDevice();

	protected:
	};
}}
